#include <iostream>
#include <vector>
using namespace std;
vector<int> in, pre, post;
bool unique = true;
void getIn(int l, int r, int L, int R) {
    if (l == r) {  // 递归到点
        in.push_back(pre[l]);
        return;
    }
    if (pre[l] == post[R]) {  // 指向同一根
        int i = l + 1;        // 指向根的右孩子
        while (i <= r && pre[i] != post[R - 1]) i++;
        if (i - l > 1)  // 存在左右孩子
            getIn(l + 1, i - 1, L, L + (i - l - 1) - 1);
        else
            unique = false;
        in.push_back(post[R]);
        getIn(i, r, L + (i - l - 1), R - 1);
    }
}
int main() {
    int n;
    scanf("%d", &n);
    pre.resize(n), post.resize(n);
    for (int i = 0; i < n; i++) scanf("%d", &pre[i]);
    for (int i = 0; i < n; i++) scanf("%d", &post[i]);
    getIn(0, n - 1, 0, n - 1);
    printf("%s\n%d", unique ? "Yes" : "No", in[0]);
    for (int i = 1; i < in.size(); i++) printf(" %d", in[i]);
    printf("\n");
    return 0;
}